#ifndef FPLAYER_CHANNEL_H
#define FPLAYER_CHANNEL_H

#include "MediaDefine.h"
#include "Capture.h"
#include "Render.h"
#include "Codec.h"

//枚举 通道类型
enum ChannelType {
  ChannelType_Video = 0,
  ChannelType_Audio
};

/**
 * author: x-fan
 * date: 2024/1/12
 * desc: 音视频传输通道
 */
class IChannel : public IBasic {
private:
  //编码器
  IEncoder *_pEncoder = nullptr;

  //编码参数
  EncoderParam _EncoderParam;

public:
  IChannel() = default;

  virtual ~IChannel() = default;

  /**
   * 绑定采集对象
   * @param pCapture 采集对象
   */
  virtual bool bindCapture(ICapture *pCapture) = 0;

  /**
   * 解绑采集对象
   * @param pCapture
   */
  virtual void unbindCapture(ICapture *pCapture) = 0;

  /**
   * 绑定输出对象
   * @param pRender 输出对象
   */
  virtual bool bindRender(IRender *pRender) = 0;

  /**
   * 解绑输出对象
   * @param pRender 输出对象
   */
  virtual void unbindRender(IRender *pRender) = 0;

  /**
   * 获取通道类型
   * @return 通道类型
   */
  virtual ChannelType getChannelType() = 0;

  /**
   * 通道传输什么类型的数据
   * @return MediaType_Video、MediaType_Audio
   */
  virtual MediaType getMediaType() = 0;

  /**
   * 获取传输通道的编码器
   * @return
   */
  virtual IEncoder *getEncoder() {
    return _pEncoder;
  };
};


/************************* 传输通道管理 *************************/
/**
 * 创建传输通道
 * @param channelType 传输通道类型
 * @return 返回传输通道
 */
IChannel *Channel_Create(ChannelType channelType);

/**
 * 销毁传输通道
 * @param pChannel 传输通道
 */
void Channel_Destroy(IChannel *pChannel);


#endif //FPLAYER_CHANNEL_H
